/*
 * WorkPingAPI.h
 *
 *  Created on: 2015-10-21
 *      Author: root
 */

#ifndef WORKPINGAPI_H_
#define WORKPINGAPI_H_
#include"PublicConfig.h"
#if USE_PUBLIC_PING
#include "PublicIPTool.h"
#define ERR_SEQID 0xffff//错误ID
/*
Type:3  PacketSize:112  ICMP_DEST_UNREACH
Type:11 PacketSize:56   ICMP_TIME_EXCEEDED
*/
typedef std::map<std::string,struct timeval>MAPPINGWAITINFO;//等待状态
typedef std::map<std::string,SETIPLIST>MAPIPLIST;//IP队列新
//初始化必备函数
void InitPingPID();
//DataSize包含包头8字节，DataSize至少28字节
typedef struct _PINGFLAG{
int    PacketSize;//数据大小
uint8_t CheckID;//检测ID
int    PingTimes;//总发送次数
int    PerTime;//发送间隔ms
int    PerNum;//单次发送个数
int    PerListTime;//构建队列间隔ms
int    TimeOut;//超时将ms
int    bSupportIPV6;//是否支持IPV6
char   SrcIP[40];//源IP
}PINGFLAG;
//初始化PING风格
PINGFLAG InitPingFlag();
//显示PING风格
void ShowPingFlag(PINGFLAG flag,size_t num);
typedef struct _LOSSINFO{
int     pingmin;//ping最小
int     pingmax;//ping最大
int     pingavg;//ping平均
double  pingstd;//ping方差
int     pingdrop;//ping丢包率
}LOSSINFO;
typedef std::map<std::string,LOSSINFO> MAPLOSSINFO;;//最终结果状态
//获取丢包情况
//最大次数建表周期
MAPLOSSINFO GetLossInfoByIPList(SETIPLIST IPList,PINGFLAG flag);
//本地IP都过一遍
MAPLOSSINFO GetLossInfoByIPListWithLocal(SETIPLIST IPList,PINGFLAG flag);
//指定源IP获取数据
//IP列表，发送间隔，单次发送数据，超时时间,发送次数
MAPLOSSINFO GetLossInfoByIPMAPList(MAPIPLIST IPMapList,PINGFLAG flag);
//显示PING结果
void ShowLossStatusInfo(MAPLOSSINFO IPList,bool bSave,bool bShow);
//TTL探测相关
typedef struct _TTLINFO{
int     ping;      //
int     ttl;       //跳转数第一个通的ttl
int     perttl;    //最后有反应的ttl
char    fromip[40];//最后有反应的IP
}TTLINFO;
typedef std::map<std::string,TTLINFO> MAPTTLINFO;;//最终结果状态
MAPTTLINFO GetTTLInfoByIPList(SETIPLIST IPList,PINGFLAG flag);
//显示TTL结果
void ShowTTLStatusInfo(MAPTTLINFO IPList,bool bSave,bool bShow);
#endif /* WORKPINGAPI_H_ */
#endif
